
/*
    The Mongoose
    Copyright 2011 Calum Cookson

This file is part of The Mongoose.

    The Mongoose is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    The Mongoose is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with The Mongoose.  If not, see <http://www.gnu.org/licenses/>.
*/

class chromosome
{
    public:
    const int8_t id;
};

class genome
{
    public:
    vector<chromosome> get_genome_representation();
    private:
    vector<chromosome> the_genome;
};

class phenotype
{
    public:
    virtual double calculate_fitness(const genome &the_genome) = 0;

};

template<class R, T> class _operator
{
    public:
    R operator()(const T &other) = 0;
    T get_result() = 0;
};

class crossover_operator : public _operator<void, genome>
{
    public:
    crossover_operator(const genome &_lhs)
    {
        lhs = _lhs;
    }
    void operator()(const genome &_rhs)
    {
        vector<chromosome> _rhs.get_genome_representation();

    }
    genome get_result();
    private:
    genome result;
    geome lhs;
};

int main()
{
    genome g1;

    return 0;
}
